package 富婆梦.第一阶段.Java基础视频学习.Scoket知识点.UDP接受键盘输入;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * @ProjectName: java-learning
 * @Package: 富婆梦.第一阶段.Scoket练习
 * @ClassName: UDPReceive
 * @Author: hemengjin
 * @Description: UDP协议接受数据
 *  实现UDP接收端
 *    实现封装数据包 java.net.DatagramPacket 将数据接收
 *    实现输出传输     java.net.DatagramSocket 接收数据包
 *
 *  实现步骤:
 *     1. 创建DatagramSocket对象,绑定端口号
 *         要和发送端端口号一致
 *     2. 创建字节数组,接收发来的数据
 *     3. 创建数据包对象DatagramPacket
 *     4. 调用DatagramSocket对象方法
 *        receive(DatagramPacket dp)接收数据,数据放在数据包中
 *     5. 拆包
 *          发送的IP地址
 *            数据包对象DatagramPacket方法getAddress()获取的是发送端的IP地址对象
 *            返回值是InetAddress对象
 *          接收到的字节个数
 *            数据包对象DatagramPacket方法 getLength()
 *          发送方的端口号
 *            数据包对象DatagramPacket方法 getPort()发送端口
 *     6. 关闭资源
 *
 * @Date:2021/11/10 15:02
 * @Version: 1.0
 */
public class UDPReceive {
    public static void main(String[] args) throws IOException {
        //创建数据包传输对象DatagramSocket，并绑定端口号（与发送端一致）
        DatagramSocket ds = new DatagramSocket(6000);

        //创建字节数组，用于存放接收到的数据
        byte[] data = new byte[1024];

        while (true){
            //创建数据包对象，接受发送方的数据包
            //构造函数DatagramPacket(byte buf[], int length)传递数组变量和变量长度
            DatagramPacket dp = new DatagramPacket(data,data.length);

            //调用ds对象方法接受传递的数据包
            ds.receive(dp);

            //接收到字节个数
            int length = dp.getLength();

            //将data数组转换成String
            String s = new String(data,0,length);
            System.out.println(s);
        }

    }
}
